<?php

namespace Dddxiu\traits;

/**
 * 处理数字大小,字符长度问题
 */
trait Size
{

    /**
     * 字段长度区间
     *
     * @param string $str 待验证的字符串
     * @param string $min 最少长度
     * @param string $max 最大长度
     * @return boolean
     * @throws \Exception
     */
    public static function str_len($str, $min = NULL, $max = NULL)
    {
        $num = mb_strlen($str);
        if ($min !== NULL && $max !== NULL) {
            return ($num >= $min) && ($num <= $max);
        }

        if ($min !== NULL) {
            return $num >= $min;
        }

        if ($max !== NULL) {
            return $num <= $max;
        }

        throw new \Exception("{$str} args error", 1);
    }

    /**
     * 数字区间
     *
     * @param string $num 待验证的数字
     * @param string $min 最少长度
     * @param string $max 最大长度
     * @return boolean
     * @throws \Exception
     */
    public static function num_size($num, $min = NULL, $max = NULL)
    {
        if ($min !== NULL && $max !== NULL) {
            return ($num >= $min) && ($num <= $max);
        }

        if ($min !== NULL) {
            return $num >= $min;
        }

        if ($max !== NULL) {
            return $num <= $max;
        }

        throw new \Exception("{$num} args error", 1);
    }

    /**
     * 时间区间
     *
     * @param string $date 待验证的时间
     * @param string $min 最少长度
     * @param string $max 最大长度
     * @return boolean
     * @throws \Exception
     */
    public static function date_span($date, $min = NULL, $max = NULL)
    {
        $num = strtotime($date);
        if ($min !== NULL && $max !== NULL) {
            return ($num >= strtotime($min)) && ($num <= strtotime($max));
        }

        if ($min !== NULL) {
            return $num >= strtotime($min);
        }

        if ($max !== NULL) {
            return $num <= strtotime($max);
        }

        throw new \Exception("{$date} args error", 1);
    }

}